package com.ruoyi.system.service.impl;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.ruoyi.system.domain.Coupon;
import com.ruoyi.system.mapper.CouponMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.UserCouponMapper;
import com.ruoyi.system.domain.UserCoupon;
import com.ruoyi.system.service.IUserCouponService;

/**
 * 用户优惠券中间Service业务层处理
 * 
 * @author adf
 * @date 2024-09-10
 */
@Service
public class UserCouponServiceImpl implements IUserCouponService 
{
    @Autowired
    private UserCouponMapper userCouponMapper;

    @Autowired
    private CouponMapper couponMapper;

    /**
     * 查询用户优惠券中间
     * 
     * @param id 用户优惠券中间主键
     * @return 用户优惠券中间
     */
    @Override
    public UserCoupon selectUserCouponById(Long id)
    {
        return userCouponMapper.selectUserCouponById(id);
    }

    /**
     * 根据用户ID查询优惠券
     * @param userCoupon
     * @return
     */
    public UserCoupon selectUserCouponByUId(UserCoupon userCoupon) {
        return userCouponMapper.selectUserCouponByUId(userCoupon);
    }

    /**
     * 查询用户优惠券中间列表
     * 
     * @param userCoupon 用户优惠券中间
     * @return 用户优惠券中间
     */
    @Override
    public List<UserCoupon> selectUserCouponList(UserCoupon userCoupon)
    {
        return userCouponMapper.selectUserCouponList(userCoupon);
    }

    /**
     * 新增用户优惠券中间
     * 
     * @param userCoupon 用户优惠券中间
     * @return 结果
     */
    @Override
    public int insertUserCoupon(UserCoupon userCoupon)
    {
        // 验证优惠券是否已领取(根据uid查询领取了多少张优惠券)
        UserCoupon oldUserCoupon = userCouponMapper.selectUserCouponByUId(userCoupon);
        // 领取时间为当前时间
        // 创建一个Calendar实例
        Calendar calendar = Calendar.getInstance();
        // 获取当前时间
        System.out.println("当前时间: " + calendar.getTime());
        userCoupon.setExpirationStart(calendar.getTime());
        // 加上一个月
        calendar.add(Calendar.MONTH, 1);
        // 输出一个月后的时间
        System.out.println("一个月后的时间: " + calendar.getTime());
        userCoupon.setExpirationEnd(calendar.getTime());
        if(oldUserCoupon != null){ // 优惠券已领取
            // 查询该优惠券最大领取数量
            Coupon coupon = couponMapper.selectCouponById(oldUserCoupon.getcId());
            System.out.println("最大数量：" + coupon.getSize());
            if(oldUserCoupon.getNum() >= coupon.getSize()){ // 领取数量userCoupon.num是否大于Coupon.size
                // 优惠券已领取, 不能领取
                System.out.println("优惠券已领取, 不能领取");
                return 0;
            }else {// 领取优惠券, 更新领取数量
                userCoupon.setNum(oldUserCoupon.getNum() + 1);
                int i = userCouponMapper.updateUserCoupon(userCoupon);
                if(i > 0){
                    // 更新优惠券投放数量
                    coupon.setNum(coupon.getNum() - 1);
                    couponMapper.updateCoupon(coupon);
                }
                return i;
            }
        }else { // 优惠券未领取
            userCoupon.setNum(1L);
            // 领取优惠券
            return userCouponMapper.insertUserCoupon(userCoupon);
        }
    }

    /**
     * 修改用户优惠券中间
     * 
     * @param userCoupon 用户优惠券中间
     * @return 结果
     */
    @Override
    public int updateUserCoupon(UserCoupon userCoupon)
    {
        return userCouponMapper.updateUserCoupon(userCoupon);
    }

    /**
     * 批量删除用户优惠券中间
     * 
     * @param ids 需要删除的用户优惠券中间主键
     * @return 结果
     */
    @Override
    public int deleteUserCouponByIds(Long[] ids)
    {
        return userCouponMapper.deleteUserCouponByIds(ids);
    }

    /**
     * 删除用户优惠券中间信息
     * 
     * @param id 用户优惠券中间主键
     * @return 结果
     */
    @Override
    public int deleteUserCouponById(Long id)
    {
        return userCouponMapper.deleteUserCouponById(id);
    }
}
